/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import Extras.GestorEstilos;
import Extras.HeaderCellRenderer;
import Extras.Mensajes;
import Extras.TableCellRendererPropio;
import Gestores.GestorCliente;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

/**
 *
 * @author Francisco
 */
public class HipotecarD extends javax.swing.JDialog {

    private GestorCliente gestorCliente;
    private int dineroDspHipoteca = 0;
    private boolean hipotecar;
    private int montoAPagar;

    /**
     * Creates new form HipotecarD
     */
    public HipotecarD(java.awt.Frame parent, boolean modal, GestorCliente gestorCliente, boolean hipotecar, boolean esPorPreso) {
        super(parent, modal);
        if (esPorPreso) {
            this.setUndecorated(esPorPreso);
            this.getRootPane().putClientProperty("Synthetica.titlePane.enabled", false);
        }
        initComponents();
        montoAPagar = -1;
        this.jLs_montoAdeudado.setVisible(false);
        this.jL_montoAdeudado.setVisible(false);
        this.jB_hipotecar.requestFocus();
        this.jB_hipotecar.setNextFocusableComponent(this.jB_cancelar);
        this.jB_cancelar.setNextFocusableComponent(this.jB_hipotecar);
        setLocationRelativeTo(null);
        jB_cancelar.setEnabled(!esPorPreso);
        this.gestorCliente = gestorCliente;
        this.hipotecar = hipotecar;
        setearDineroActual();
        crearColumnasInvisibles();
        if (!hipotecar) {
            cambiarNombreColumna();
            setearNombresDeshipoteca();
            this.jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/DESHIPOTECAR2 ON.png")));
        }
        setearPropiedadesTablas();
        GestorEstilos.pintar(this); 
    }

    /**
     * Crea una nueva interfaz hipotecar para cuando el jugador debe hacerlo
     * obligatoriamente para pagar ya sea un alquiler o un impuesto.
     */
    public HipotecarD(java.awt.Frame parent, boolean modal, GestorCliente gestorCliente, int montoAPagar) {
        super(parent, modal);
        this.setUndecorated(true);
        this.getRootPane().putClientProperty("Synthetica.titlePane.enabled", false);
        initComponents();
        this.jB_hipotecar.requestFocus();
        this.jB_hipotecar.setNextFocusableComponent(this.jB_cancelar);
        this.jB_cancelar.setNextFocusableComponent(this.jB_hipotecar);
        setLocationRelativeTo(null);
        jB_cancelar.setEnabled(false);
        this.gestorCliente = gestorCliente;
        this.hipotecar = true;
        setearDineroActual();
        crearColumnasInvisibles();
        this.montoAPagar = montoAPagar;
        this.jL_montoAdeudado.setText(montoAPagar + "");
        this.jL_montoAdeudado.setBackground(new Color(255, 174, 174));
        setearPropiedadesTablas();
        GestorEstilos.pintar(this);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jT_propiedadesSinHipotecar = new javax.swing.JTable();
        jScrollPane2 = new javax.swing.JScrollPane();
        jT_propiedadesSeleccionadas = new javax.swing.JTable();
        jB_deseleccionarUno = new javax.swing.JButton();
        jB_deseleccionarTodos = new javax.swing.JButton();
        jB_seleccionarTodos = new javax.swing.JButton();
        jB_seleccionarUno = new javax.swing.JButton();
        jB_hipotecar = new javax.swing.JButton();
        jB_cancelar = new javax.swing.JButton();
        jLs_dineroDspHipoteca = new javax.swing.JLabel();
        jL_dineroDspHipoteca = new javax.swing.JLabel();
        jLe_propiedadesIzquierda = new javax.swing.JLabel();
        jLe_propiedadesDerecha = new javax.swing.JLabel();
        jL_montoAdeudado = new javax.swing.JLabel();
        jLs_montoAdeudado = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Hipoteca");
        setMaximumSize(new java.awt.Dimension(825, 275));
        setMinimumSize(new java.awt.Dimension(825, 275));
        setPreferredSize(new java.awt.Dimension(825, 275));
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });
        getContentPane().setLayout(null);

        jT_propiedadesSinHipotecar.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nombre", "Color", "Valor Hipotecario", "id"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jT_propiedadesSinHipotecar.setMinimumSize(new java.awt.Dimension(80, 0));
        jT_propiedadesSinHipotecar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jT_propiedadesSinHipotecarMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jT_propiedadesSinHipotecar);
        jT_propiedadesSinHipotecar.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        if (jT_propiedadesSinHipotecar.getColumnModel().getColumnCount() > 0) {
            jT_propiedadesSinHipotecar.getColumnModel().getColumn(0).setResizable(false);
            jT_propiedadesSinHipotecar.getColumnModel().getColumn(1).setResizable(false);
            jT_propiedadesSinHipotecar.getColumnModel().getColumn(2).setResizable(false);
            jT_propiedadesSinHipotecar.getColumnModel().getColumn(3).setResizable(false);
            jT_propiedadesSinHipotecar.getColumnModel().getColumn(3).setPreferredWidth(0);
        }

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(10, 39, 360, 120);

        jT_propiedadesSeleccionadas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nombre", "Color", "Valor Hipotecario", "id"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane2.setViewportView(jT_propiedadesSeleccionadas);
        if (jT_propiedadesSeleccionadas.getColumnModel().getColumnCount() > 0) {
            jT_propiedadesSeleccionadas.getColumnModel().getColumn(0).setResizable(false);
            jT_propiedadesSeleccionadas.getColumnModel().getColumn(1).setResizable(false);
            jT_propiedadesSeleccionadas.getColumnModel().getColumn(2).setResizable(false);
            jT_propiedadesSeleccionadas.getColumnModel().getColumn(3).setResizable(false);
        }

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(447, 39, 360, 120);

        jB_deseleccionarUno.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ ON.png"))); // NOI18N
        jB_deseleccionarUno.setEnabled(false);
        jB_deseleccionarUno.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jB_deseleccionarUnoMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jB_deseleccionarUnoMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jB_deseleccionarUnoMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jB_deseleccionarUnoMouseReleased(evt);
            }
        });
        jB_deseleccionarUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_deseleccionarUnoActionPerformed(evt);
            }
        });
        getContentPane().add(jB_deseleccionarUno);
        jB_deseleccionarUno.setBounds(388, 136, 49, 23);

        jB_deseleccionarTodos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ ON.png"))); // NOI18N
        jB_deseleccionarTodos.setEnabled(false);
        jB_deseleccionarTodos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jB_deseleccionarTodosMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jB_deseleccionarTodosMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jB_deseleccionarTodosMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jB_deseleccionarTodosMouseReleased(evt);
            }
        });
        jB_deseleccionarTodos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_deseleccionarTodosActionPerformed(evt);
            }
        });
        getContentPane().add(jB_deseleccionarTodos);
        jB_deseleccionarTodos.setBounds(388, 109, 49, 23);

        jB_seleccionarTodos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA ON.png"))); // NOI18N
        jB_seleccionarTodos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jB_seleccionarTodosMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jB_seleccionarTodosMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jB_seleccionarTodosMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jB_seleccionarTodosMouseReleased(evt);
            }
        });
        jB_seleccionarTodos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_seleccionarTodosActionPerformed(evt);
            }
        });
        getContentPane().add(jB_seleccionarTodos);
        jB_seleccionarTodos.setBounds(388, 68, 49, 23);

        jB_seleccionarUno.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA ON.png"))); // NOI18N
        jB_seleccionarUno.setEnabled(false);
        jB_seleccionarUno.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jB_seleccionarUnoMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jB_seleccionarUnoMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jB_seleccionarUnoMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jB_seleccionarUnoMouseReleased(evt);
            }
        });
        jB_seleccionarUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_seleccionarUnoActionPerformed(evt);
            }
        });
        getContentPane().add(jB_seleccionarUno);
        jB_seleccionarUno.setBounds(388, 39, 49, 23);

        jB_hipotecar.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jB_hipotecar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/Botones/HIPOTECAR2 ON.png"))); // NOI18N
        jB_hipotecar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jB_hipotecarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jB_hipotecarMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jB_hipotecarMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jB_hipotecarMouseReleased(evt);
            }
        });
        jB_hipotecar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_hipotecarActionPerformed(evt);
            }
        });
        jB_hipotecar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jB_hipotecarKeyPressed(evt);
            }
        });
        getContentPane().add(jB_hipotecar);
        jB_hipotecar.setBounds(10, 198, 160, 40);

        jB_cancelar.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jB_cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagenes/Botones/CANCELARHIPOTECAR ON.png"))); // NOI18N
        jB_cancelar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jB_cancelarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jB_cancelarMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jB_cancelarMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jB_cancelarMouseReleased(evt);
            }
        });
        jB_cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jB_cancelarActionPerformed(evt);
            }
        });
        jB_cancelar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jB_cancelarKeyPressed(evt);
            }
        });
        getContentPane().add(jB_cancelar);
        jB_cancelar.setBounds(647, 198, 160, 40);

        jLs_dineroDspHipoteca.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLs_dineroDspHipoteca.setText("Dinero despues de hipotecar:");
        getContentPane().add(jLs_dineroDspHipoteca);
        jLs_dineroDspHipoteca.setBounds(447, 170, 220, 17);

        jL_dineroDspHipoteca.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jL_dineroDspHipoteca.setText("jLabel2");
        getContentPane().add(jL_dineroDspHipoteca);
        jL_dineroDspHipoteca.setBounds(690, 170, 96, 17);

        jLe_propiedadesIzquierda.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLe_propiedadesIzquierda.setText("Propiedades Sin Hipotecar:");
        getContentPane().add(jLe_propiedadesIzquierda);
        jLe_propiedadesIzquierda.setBounds(10, 11, 202, 17);

        jLe_propiedadesDerecha.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLe_propiedadesDerecha.setText("Propiedades a Hipotecar:");
        getContentPane().add(jLe_propiedadesDerecha);
        jLe_propiedadesDerecha.setBounds(447, 11, 208, 17);

        jL_montoAdeudado.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jL_montoAdeudado.setText("jLabel2");
        getContentPane().add(jL_montoAdeudado);
        jL_montoAdeudado.setBounds(140, 170, 96, 17);

        jLs_montoAdeudado.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLs_montoAdeudado.setText("Monto adeudado:");
        getContentPane().add(jLs_montoAdeudado);
        jLs_montoAdeudado.setBounds(10, 170, 140, 17);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jB_cancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_cancelarActionPerformed
        gestorCliente.avisarCancelacionAccion();
        dispose();
    }//GEN-LAST:event_jB_cancelarActionPerformed

    private void jB_seleccionarUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_seleccionarUnoActionPerformed
        DefaultTableModel dtm = (DefaultTableModel) jT_propiedadesSinHipotecar.getModel();
        String nombre = (String) dtm.getValueAt(jT_propiedadesSinHipotecar.getSelectedRow(), 0);
        String color = (String) dtm.getValueAt(jT_propiedadesSinHipotecar.getSelectedRow(), 1);
        int valorHipotecario = (int) dtm.getValueAt(jT_propiedadesSinHipotecar.getSelectedRow(), 2);
        int id = (int) dtm.getValueAt(jT_propiedadesSinHipotecar.getSelectedRow(), 3);

        if (!hipotecar && (valorHipotecario > this.dineroDspHipoteca)) {
            Mensajes.mostrarError("No le alcanza el dinero para deshipotecar esa propiedad.");
            return;
        }

        dtm.removeRow(jT_propiedadesSinHipotecar.getSelectedRow());

        DefaultTableModel dtmSel = (DefaultTableModel) jT_propiedadesSeleccionadas.getModel();
        dtmSel.addRow(new Object[]{nombre, color, valorHipotecario, id});

        if (jT_propiedadesSinHipotecar.getRowCount() == 0) {
            jB_seleccionarTodos.setEnabled(false);
            jB_seleccionarUno.setEnabled(false);
        } else {
            jB_seleccionarTodos.setEnabled(true);
            jB_seleccionarUno.setEnabled(true);
        }

        if (jT_propiedadesSeleccionadas.getRowCount() > 0) {
            jB_deseleccionarTodos.setEnabled(true);
            jB_deseleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ ON.png")));
            jB_deseleccionarUno.setEnabled(true);
            jB_deseleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ ON.png")));
            ListSelectionModel selectionModel = jT_propiedadesSeleccionadas.getSelectionModel();
            selectionModel.setSelectionInterval(jT_propiedadesSeleccionadas.getRowCount() - 1, jT_propiedadesSeleccionadas.getRowCount() - 1);
        }

        if (jT_propiedadesSinHipotecar.getRowCount() > 0) {
            ListSelectionModel selectionModel = jT_propiedadesSinHipotecar.getSelectionModel();
            selectionModel.setSelectionInterval(jT_propiedadesSinHipotecar.getRowCount() - 1, jT_propiedadesSinHipotecar.getRowCount() - 1);
        }

        dineroDspHipoteca = hipotecar ? dineroDspHipoteca + valorHipotecario : dineroDspHipoteca - valorHipotecario;
        this.jL_dineroDspHipoteca.setText(dineroDspHipoteca + "");
        if (this.montoAPagar != -1) {
            if (dineroDspHipoteca >= montoAPagar) {
                this.jL_montoAdeudado.setBackground(new Color(174, 255, 174));
            } else {
                this.jL_montoAdeudado.setBackground(new Color(255, 174, 174));
            }
        }
    }//GEN-LAST:event_jB_seleccionarUnoActionPerformed

    private void jB_seleccionarTodosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_seleccionarTodosActionPerformed
        DefaultTableModel dtm = (DefaultTableModel) jT_propiedadesSinHipotecar.getModel();
        DefaultTableModel dtmSel = (DefaultTableModel) jT_propiedadesSeleccionadas.getModel();
        String nombre;
        String color;
        int valorHipotecario;
        int id;
        int valoresTotales = 0;
        for (int i = 0; i < jT_propiedadesSinHipotecar.getRowCount(); i++) {
            valorHipotecario = (int) dtm.getValueAt(i, 2);
            valoresTotales += valorHipotecario;
            if (!hipotecar && (valoresTotales > this.dineroDspHipoteca)) {
                Mensajes.mostrarError("No le alcanza el dinero para deshipotecar todas las propiedades.");
                return;
            }
        }
        while (jT_propiedadesSinHipotecar.getRowCount() != 0) {
            valorHipotecario = (int) dtm.getValueAt(0, 2);
            nombre = (String) dtm.getValueAt(0, 0);
            color = (String) dtm.getValueAt(0, 1);
            id = (int) dtm.getValueAt(0, 3);
            dtm.removeRow(0);
            dtmSel.addRow(new Object[]{nombre, color, valorHipotecario, id});
            dineroDspHipoteca = hipotecar ? dineroDspHipoteca + valorHipotecario : dineroDspHipoteca - valorHipotecario;
        }

        if (jT_propiedadesSinHipotecar.getRowCount() == 0) {
            jB_seleccionarTodos.setEnabled(false);
            jB_seleccionarUno.setEnabled(false);
        } else {
            jB_seleccionarTodos.setEnabled(true);
            jB_seleccionarUno.setEnabled(true);
        }

        if (jT_propiedadesSeleccionadas.getRowCount() > 0) {
            jB_deseleccionarTodos.setEnabled(true);
            jB_deseleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ ON.png")));
            jB_deseleccionarUno.setEnabled(true);
            jB_deseleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ ON.png")));
            ListSelectionModel selectionModel = jT_propiedadesSeleccionadas.getSelectionModel();
            selectionModel.setSelectionInterval(jT_propiedadesSeleccionadas.getRowCount() - 1, jT_propiedadesSeleccionadas.getRowCount() - 1);
        }

        this.jL_dineroDspHipoteca.setText(dineroDspHipoteca + "");

        if (this.montoAPagar != -1) {
            if (dineroDspHipoteca >= montoAPagar) {
                this.jL_montoAdeudado.setBackground(new Color(174, 255, 174));
            } else {
                this.jL_montoAdeudado.setBackground(new Color(255, 174, 174));
            }
        }
    }//GEN-LAST:event_jB_seleccionarTodosActionPerformed

    private void jB_deseleccionarTodosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_deseleccionarTodosActionPerformed
        DefaultTableModel dtm = (DefaultTableModel) jT_propiedadesSeleccionadas.getModel();
        DefaultTableModel dtmHip = (DefaultTableModel) jT_propiedadesSinHipotecar.getModel();
        String nombre;
        String color;
        int valorHipotecario;
        int id;
        while (jT_propiedadesSeleccionadas.getRowCount() != 0) {
            nombre = (String) dtm.getValueAt(0, 0);
            color = (String) dtm.getValueAt(0, 1);
            valorHipotecario = (int) dtm.getValueAt(0, 2);
            id = (int) dtm.getValueAt(0, 3);
            dtm.removeRow(0);
            dineroDspHipoteca = hipotecar ? dineroDspHipoteca - valorHipotecario : dineroDspHipoteca + valorHipotecario;
            dtmHip.addRow(new Object[]{nombre, color, valorHipotecario, id});
        }

        if (jT_propiedadesSeleccionadas.getRowCount() == 0) {
            jB_deseleccionarUno.setEnabled(false);
            jB_deseleccionarTodos.setEnabled(false);
        } else {
            jB_deseleccionarUno.setEnabled(true);
            jB_deseleccionarTodos.setEnabled(true);
        }

        if (jT_propiedadesSinHipotecar.getRowCount() > 0) {
            jB_seleccionarTodos.setEnabled(true);
            jB_seleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA ON.png")));
            jB_seleccionarUno.setEnabled(true);
            jB_seleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA ON.png")));
            ListSelectionModel selectionModel = jT_propiedadesSinHipotecar.getSelectionModel();
            selectionModel.setSelectionInterval(jT_propiedadesSinHipotecar.getRowCount() - 1, jT_propiedadesSinHipotecar.getRowCount() - 1);
        }

        this.jL_dineroDspHipoteca.setText(dineroDspHipoteca + "");

        if (this.montoAPagar != -1) {
            if (dineroDspHipoteca >= montoAPagar) {
                this.jL_montoAdeudado.setBackground(new Color(174, 255, 174));
            } else {
                this.jL_montoAdeudado.setBackground(new Color(255, 174, 174));
            }
        }
    }//GEN-LAST:event_jB_deseleccionarTodosActionPerformed

    private void jB_deseleccionarUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_deseleccionarUnoActionPerformed
        DefaultTableModel dtm = (DefaultTableModel) jT_propiedadesSeleccionadas.getModel();
        String nombre = (String) dtm.getValueAt(jT_propiedadesSeleccionadas.getSelectedRow(), 0);
        String color = (String) dtm.getValueAt(jT_propiedadesSeleccionadas.getSelectedRow(), 1);
        int valorHipotecario = (int) dtm.getValueAt(jT_propiedadesSeleccionadas.getSelectedRow(), 2);
        int id = (int) dtm.getValueAt(jT_propiedadesSeleccionadas.getSelectedRow(), 3);

        dtm.removeRow(jT_propiedadesSeleccionadas.getSelectedRow());

        DefaultTableModel dtmHipo = (DefaultTableModel) jT_propiedadesSinHipotecar.getModel();
        dtmHipo.addRow(new Object[]{nombre, color, valorHipotecario, id});

        if (jT_propiedadesSeleccionadas.getRowCount() == 0) {
            jB_deseleccionarUno.setEnabled(false);
            jB_deseleccionarTodos.setEnabled(false);
        } else {
            jB_deseleccionarUno.setEnabled(true);
            jB_deseleccionarTodos.setEnabled(true);
        }

        if (jT_propiedadesSinHipotecar.getRowCount() > 0) {
            jB_seleccionarTodos.setEnabled(true);
            jB_seleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA ON.png")));
            jB_seleccionarUno.setEnabled(true);
            jB_seleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA ON.png")));
            ListSelectionModel selectionModel = jT_propiedadesSinHipotecar.getSelectionModel();
            selectionModel.setSelectionInterval(jT_propiedadesSinHipotecar.getRowCount() - 1, jT_propiedadesSinHipotecar.getRowCount() - 1);
        }

        if (jT_propiedadesSeleccionadas.getRowCount() > 0) {
            ListSelectionModel selectionModel = jT_propiedadesSeleccionadas.getSelectionModel();
            selectionModel.setSelectionInterval(jT_propiedadesSeleccionadas.getRowCount() - 1, jT_propiedadesSeleccionadas.getRowCount() - 1);
        }
        
        dineroDspHipoteca = hipotecar ? dineroDspHipoteca - valorHipotecario : dineroDspHipoteca + valorHipotecario;
        this.jL_dineroDspHipoteca.setText(dineroDspHipoteca + "");

        if (this.montoAPagar != -1) {
            if (dineroDspHipoteca >= montoAPagar) {
                this.jL_montoAdeudado.setBackground(new Color(174, 255, 174));
            } else {
                this.jL_montoAdeudado.setBackground(new Color(255, 174, 174));
            }
        }
    }//GEN-LAST:event_jB_deseleccionarUnoActionPerformed

    private void jB_hipotecarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jB_hipotecarActionPerformed
        if (jT_propiedadesSeleccionadas.getRowCount() == 0) {
            Mensajes.mostrarError("No se ha seleccionado ninguna propiedad para hipotecar.");
            return;
        }
        if (montoAPagar != -1 && montoAPagar < dineroDspHipoteca) {
            Mensajes.mostrarError("Necesita hipotecar mas propiedades para poder pagar su deuda.");
            return;
        }
        DefaultTableModel dtm = (DefaultTableModel) jT_propiedadesSeleccionadas.getModel();
        int id;
        LinkedList propiedadesHipotecadas = new LinkedList();
        int cantidadDePropiedades = jT_propiedadesSeleccionadas.getRowCount();
        while (cantidadDePropiedades != 0) {
            id = (int) dtm.getValueAt(cantidadDePropiedades - 1, 3);
            propiedadesHipotecadas.add(id);
            cantidadDePropiedades--;
        }
        if (hipotecar) {
            gestorCliente.hipotecar(propiedadesHipotecadas);
        } else {
            gestorCliente.deshipotecar(propiedadesHipotecadas);
        }
    }//GEN-LAST:event_jB_hipotecarActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        gestorCliente.avisarCancelacionAccion();
        dispose();
    }//GEN-LAST:event_formWindowClosing

    private void jB_hipotecarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jB_hipotecarKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            this.jB_hipotecarActionPerformed(null);
        }
    }//GEN-LAST:event_jB_hipotecarKeyPressed

    private void jB_cancelarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jB_cancelarKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            this.jB_cancelarActionPerformed(null);
        }
    }//GEN-LAST:event_jB_cancelarKeyPressed

    private void jB_hipotecarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_hipotecarMouseEntered
        if (jB_hipotecar.isEnabled()) {
            if (hipotecar) {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/HIPOTECAR2 SEL.png")));
            } else {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/DESHIPOTECAR2 SEL.png")));
            }
        }
    }//GEN-LAST:event_jB_hipotecarMouseEntered

    private void jB_hipotecarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_hipotecarMouseExited
        if (jB_hipotecar.isEnabled()) {
            if (hipotecar) {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/HIPOTECAR2 ON.png")));
            } else {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/DESHIPOTECAR2 ON.png")));
            }
        }
    }//GEN-LAST:event_jB_hipotecarMouseExited

    private void jB_hipotecarMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_hipotecarMousePressed
        if (jB_hipotecar.isEnabled()) {
            if (hipotecar) {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/HIPOTECAR2 OFF.png")));
            } else {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/DESHIPOTECAR2 OFF.png")));
            }
        }
    }//GEN-LAST:event_jB_hipotecarMousePressed

    private void jB_hipotecarMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_hipotecarMouseReleased
        if (jB_hipotecar.isEnabled()) {
            if (hipotecar) {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/HIPOTECAR2 ON.png")));
            } else {
                jB_hipotecar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/DESHIPOTECAR2 ON.png")));
            }
        }
    }//GEN-LAST:event_jB_hipotecarMouseReleased

    private void jB_cancelarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_cancelarMouseEntered
        if (jB_cancelar.isEnabled()) {
            jB_cancelar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/CANCELARHIPOTECAR SEL.png")));
        }
    }//GEN-LAST:event_jB_cancelarMouseEntered

    private void jB_cancelarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_cancelarMouseExited
        if (jB_cancelar.isEnabled()) {
            jB_cancelar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/CANCELARHIPOTECAR ON.png")));
        }
    }//GEN-LAST:event_jB_cancelarMouseExited

    private void jB_cancelarMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_cancelarMousePressed
        if (jB_cancelar.isEnabled()) {
            jB_cancelar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/CANCELARHIPOTECAR OFF.png")));
        }
    }//GEN-LAST:event_jB_cancelarMousePressed

    private void jB_cancelarMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_cancelarMouseReleased
        if (jB_cancelar.isEnabled()) {
            jB_cancelar.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/CANCELARHIPOTECAR ON.png")));
        }
    }//GEN-LAST:event_jB_cancelarMouseReleased

    private void jB_seleccionarUnoMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarUnoMouseEntered
        if (jB_seleccionarUno.isEnabled()) {
            jB_seleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA SEL.png")));
        }
    }//GEN-LAST:event_jB_seleccionarUnoMouseEntered

    private void jB_seleccionarUnoMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarUnoMouseExited
        if (jB_seleccionarUno.isEnabled()) {
            jB_seleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA ON.png")));
        }
    }//GEN-LAST:event_jB_seleccionarUnoMouseExited

    private void jB_seleccionarUnoMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarUnoMousePressed
        if (jB_seleccionarUno.isEnabled()) {
            jB_seleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA OFF.png")));
        }
    }//GEN-LAST:event_jB_seleccionarUnoMousePressed

    private void jB_seleccionarUnoMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarUnoMouseReleased
        if (jB_seleccionarUno.isEnabled()) {
            jB_seleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARADERECHA ON.png")));
        }
    }//GEN-LAST:event_jB_seleccionarUnoMouseReleased

    private void jB_seleccionarTodosMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarTodosMouseEntered
        if (jB_seleccionarTodos.isEnabled()) {
            jB_seleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA SEL.png")));
        }
    }//GEN-LAST:event_jB_seleccionarTodosMouseEntered

    private void jB_seleccionarTodosMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarTodosMouseExited
        if (jB_seleccionarTodos.isEnabled()) {
            jB_seleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA ON.png")));
        }
    }//GEN-LAST:event_jB_seleccionarTodosMouseExited

    private void jB_seleccionarTodosMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarTodosMousePressed
        if (jB_seleccionarTodos.isEnabled()) {
            jB_seleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA OFF.png")));
        }
    }//GEN-LAST:event_jB_seleccionarTodosMousePressed

    private void jB_seleccionarTodosMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_seleccionarTodosMouseReleased
        if (jB_seleccionarTodos.isEnabled()) {
            jB_seleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARADERECHA ON.png")));
        }
    }//GEN-LAST:event_jB_seleccionarTodosMouseReleased

    private void jB_deseleccionarTodosMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarTodosMouseEntered
        if (jB_deseleccionarTodos.isEnabled()) {
            jB_deseleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ SEL.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarTodosMouseEntered

    private void jB_deseleccionarTodosMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarTodosMouseExited
        if (jB_deseleccionarTodos.isEnabled()) {
            jB_deseleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ ON.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarTodosMouseExited

    private void jB_deseleccionarTodosMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarTodosMousePressed
        if (jB_deseleccionarTodos.isEnabled()) {
            jB_deseleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ OFF.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarTodosMousePressed

    private void jB_deseleccionarTodosMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarTodosMouseReleased
        if (jB_deseleccionarTodos.isEnabled()) {
            jB_deseleccionarTodos.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/TODOSPARAIZQ ON.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarTodosMouseReleased

    private void jB_deseleccionarUnoMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarUnoMouseEntered
        if (jB_deseleccionarUno.isEnabled()) {
            jB_deseleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ SEL.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarUnoMouseEntered

    private void jB_deseleccionarUnoMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarUnoMouseExited
        if (jB_deseleccionarUno.isEnabled()) {
            jB_deseleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ ON.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarUnoMouseExited

    private void jB_deseleccionarUnoMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarUnoMousePressed
        if (jB_deseleccionarUno.isEnabled()) {
            jB_deseleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ OFF.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarUnoMousePressed

    private void jB_deseleccionarUnoMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jB_deseleccionarUnoMouseReleased
        if (jB_deseleccionarUno.isEnabled()) {
            jB_deseleccionarUno.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Botones/UNOPARAIZQ ON.png")));
        }
    }//GEN-LAST:event_jB_deseleccionarUnoMouseReleased

    private void jT_propiedadesSinHipotecarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jT_propiedadesSinHipotecarMouseClicked
        if (jT_propiedadesSinHipotecar.getRowCount() > 0) {
            this.jB_seleccionarUno.setEnabled(true);
        }
    }//GEN-LAST:event_jT_propiedadesSinHipotecarMouseClicked

    public JTable getTablaAHipotecar() {
        return jT_propiedadesSinHipotecar;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jB_cancelar;
    private javax.swing.JButton jB_deseleccionarTodos;
    private javax.swing.JButton jB_deseleccionarUno;
    private javax.swing.JButton jB_hipotecar;
    private javax.swing.JButton jB_seleccionarTodos;
    private javax.swing.JButton jB_seleccionarUno;
    private javax.swing.JLabel jL_dineroDspHipoteca;
    private javax.swing.JLabel jL_montoAdeudado;
    private javax.swing.JLabel jLe_propiedadesDerecha;
    private javax.swing.JLabel jLe_propiedadesIzquierda;
    private javax.swing.JLabel jLs_dineroDspHipoteca;
    private javax.swing.JLabel jLs_montoAdeudado;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jT_propiedadesSeleccionadas;
    private javax.swing.JTable jT_propiedadesSinHipotecar;
    // End of variables declaration//GEN-END:variables

    private void crearColumnasInvisibles() {
        jT_propiedadesSinHipotecar.getColumn("id").setMaxWidth(0);
        jT_propiedadesSinHipotecar.getColumn("id").setMinWidth(0);
        jT_propiedadesSinHipotecar.getColumn("id").setWidth(0);
        jT_propiedadesSinHipotecar.getColumn("id").setResizable(false);
        jT_propiedadesSinHipotecar.getColumn("id").setPreferredWidth(0);
        jT_propiedadesSinHipotecar.getColumn("Valor Hipotecario").setResizable(false);
        jT_propiedadesSeleccionadas.getColumn("id").setMaxWidth(0);
        jT_propiedadesSeleccionadas.getColumn("id").setMinWidth(0);
        jT_propiedadesSeleccionadas.getColumn("id").setWidth(0);
        jT_propiedadesSeleccionadas.getColumn("id").setResizable(false);
        jT_propiedadesSeleccionadas.getColumn("id").setPreferredWidth(0);
        jT_propiedadesSeleccionadas.getColumn("Valor Hipotecario").setResizable(false);
    }

    private void setearDineroActual() {
        dineroDspHipoteca = this.gestorCliente.getDineroEfectivo();
        this.jL_dineroDspHipoteca.setText(dineroDspHipoteca + "");
    }

    private void cambiarNombreColumna() {
        JTableHeader th = jT_propiedadesSinHipotecar.getTableHeader();
        TableColumnModel tcm = th.getColumnModel();
        TableColumn tc = tcm.getColumn(2);
        tc.setHeaderValue("Costo Deshipoteca");
        th.repaint();
        th = jT_propiedadesSeleccionadas.getTableHeader();
        tcm = th.getColumnModel();
        tc = tcm.getColumn(2);
        tc.setHeaderValue("Costo Deshipoteca");
        th.repaint();
    }

    private void setearPropiedadesTablas() {
        this.jT_propiedadesSinHipotecar.getTableHeader().setDefaultRenderer(new HeaderCellRenderer());
        this.jT_propiedadesSinHipotecar.setDefaultRenderer(String.class, new TableCellRendererPropio());
        this.jT_propiedadesSeleccionadas.getTableHeader().setDefaultRenderer(new HeaderCellRenderer());
        this.jT_propiedadesSeleccionadas.setDefaultRenderer(String.class, new TableCellRendererPropio());

        this.jT_propiedadesSeleccionadas.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        this.jT_propiedadesSinHipotecar.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }

    private void setearNombresDeshipoteca() {
        this.jLs_dineroDspHipoteca.setText("Dinero despues de deshipotecar:");
        this.jLe_propiedadesIzquierda.setText("Propiedades Hipotecadas:");
        this.jLe_propiedadesDerecha.setText("Propiedades A Deshipotecar:");
    }
}
